import * as ddcode from "dingtalk-jsapi";
import moment from "moment";

// 采购入库单
let app = getApp();

Page({
  data: {
    index: 0,

    id:"",  //单据编号
    codedj: "",
    date: '',
    checked: true,
    defaultChecked: false,
    checked2: true,
    allChecked: false,  // 用于记录全选复选框的选中状态
    indeterminate: true,
    checkedArr: [],   // 用于记录复选框的选中状态
    wuliaomx: "物料",
    showContent: true, // 初始状态为显示
    wuliaoListfenjie:[],
    wuliaoList: [],

    secondElement: '', // 存储第二个元素

    showBigImage: false, //是否展示大图片

    currentIndex: 0, // 添加 currentIndex 变量并初始化为 0 上一个下一个

    basicUnitQuantities:"",   //基本单位数量

    orderMaterialCode:"",   //订单明细

    materialCodesfenjie:"",   //分解明细

    resultList: [
      {
        fenjieItems: [
          { id: 1, selected: false },
          { id: 2, selected: false },
        ]
      },
      {
        orderItem: {}
      },
    ],

    searchInput:"",   //用于保存搜索框的值
  },


  onLoad(options) {
    var that = this;
    var date = new Date();
    that.setData({
      date: date.getFullYear() + '-' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()),
    })

    // 接收pickingLists传过来的数据
    if (options.item) {
      that.setData({
        item: JSON.parse(options.item),
        code: JSON.parse(options.item)['FID']
      })
      console.log("接收pickingLists传过来的数据",that.data.item);
      console.log("接收pickingLists传过来的数据fid",that.data.code);
    }

  },

  onShow() {
    //  console.log("sssssssss")
    var that = this;
    // 在 onShow 生命周期函数中获取页面栈
    const pages = getCurrentPages();
    const currPage = pages[pages.length - 1]; // 获取当前页面实例对象

    // 从当前页面获取数据
    const savedData = currPage.data.savedData || {};
    const savedIndex = currPage.data.savedIndex;

    // 如果 savedIndex 有效，则更新 wuliaoList 中对应索引的数据
    if (savedIndex !== undefined && savedIndex !== null) {
      var wuliaoList = that.data.wuliaoList;
      // 假设 savedData 是一个包含要更新数据的对象
      wuliaoList[savedIndex] = savedData;

      // 更新页面数据
      this.setData({
        wuliaoList,
      });
    }

    that.getPurchaseInquire()

    // var wuliaoList = that.data.wuliaoList;
    // wuliaoList.in
    // // 更新页面数据
    // this.setData({
    //   savedData,
    //   savedIndex
    // });
  },

   // 扫码
   onSearchShop() {
    const that = this;
    dd.scan({
        type: 'qr',
        success: (res) => {
            console.log("扫码结果", res.code);
            that.onSearchInput({ detail: { value: res.code } }); // 调用输入框值改变事件，并传入扫码结果
        },
        fail: (err) => {
            // 扫码失败后的回调函数，可以根据实际需求进行处理
        }
    });
  },

// 图片的显示与隐藏
  showImage(e) {
    const src = e.currentTarget.dataset.src; // 获取被点击图片的路径
    console.log("aaaaaaaaaaaaaaaaaaaaa",src);
    this.setData({
      bigImageSrc: src, // 将图片路径赋值给变量 bigImageSrc
      showBigImage: true // 显示放大后的图片区域
    });
  },
  hideImage() {
    this.setData({
      showBigImage: false
    });
  },



  // 扫码
  scanCode() {
    ddcode.biz.util.scan({
      type: String, // type 为 all、qrCode、barCode，默认是all。
      onSuccess: function (data) {
        //onSuccess将在扫码成功之后回调
        /* data结构
          { 'text': String}
        */
        console.log(data.text)
      },
      onFail: function (err) {
        // alert('失败')
        console.log("扫码请求失败");
      }
    })
  },

  // 获取输入内容进行搜索
  onSearchInput(e){
    console.log("e===>>",e)
    var that = this;
    that.setData({
      searchInput:e,
      page:1,
      dowm:true,
      purchaseOrderList:[]
    })
    
    that.getPurchaseInquire();

  },

// 用于监听输入框值改变事件
onSearchInput(e) {
  var that = this;
  var searchTerm = e.detail.value.trim(); // 获取输入框的搜索内容并去除首尾空格
  console.log("输入框用来搜索的内容", searchTerm);

  // 清除之前的搜索定时器
  clearTimeout(that.data.searchTimer);

  // 设置一个新的定时器，在用户停止输入300毫秒后执行搜索操作
  var searchTimer = setTimeout(function() {
      that.setData({
          searchTimer: null // 清空定时器
      });

       that.getPurchaseInquire(searchTerm); // 执行搜索操作sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
 
      }, 300);

  // 将定时器存储在数据中
  that.setData({
      searchTimer: searchTimer
  });
},

// 清除搜索框内容
onSearchClear(e) {
  var that = this;
  that.setData({
    searchInput: '', // 清空搜索框内容
    page: 1,
    dowm: true,
    purchaseOrderList: []
  });
},
// 点击小叉号清空
clrarsousuoy(){
  var that = this

  const namesArray = this.data.names;

  this.setData({
    sousuoyvalue: "",
    matchedNameList: namesArray // 将仓库列表数据赋值给matchedNameList

  });
  console.log("clear==>",that.data.sousuoyvalue);
  if(that.data.sousuoyvalue==""){
    console.log("搜索框已被清空");
    }
},


// 订单明细
getPurchaseInquire(searchTerm) {
var that = this;
var fidpd = that.data.code
console.log("订单明细数据fid",fidpd);

let filterString = "";

// 如果搜索框有内容，则设置过滤条件为 FBillNo like '%searchTerm%'
// 否则，设置过滤条件为空字符串，表示不对 FBillNo 字段进行过滤
filterString = searchTerm ? "F_ZYKJ_Base1.fnumber like '%" + searchTerm + "%'" : "F_ZYKJ_Base1.fnumber like '%%'";

var data = JSON.stringify(
  {
    "xx": {
      "formId": "ZYKJ_SCRWD",
      "fields": [
        "F_ZYKJ_SCRWD_Entry_FEntryID","F_ZYKJ_BaseProperty","F_ZYKJ_Base1.fnumber","F_ZYKJ_BaseProperty1"
      ],
      "FilterString": "FID='"+ fidpd +"'and " + filterString,
      "orderby": "",
      "topRowCount": 0,
      "limit": 0,
      "StartRow": 0,
      "fields_name": [
        "实体主键","物料名称","物料编码","规格型号"
      ],
      "acctID": "66249c7f42e1e4"
    },
    "login": {
      "username": "test",
      "password": "zz333333"
    }
  }
)

// return
dd.httpRequest({
  url: 'http://cloud.reece-sewing.com:9351/king_query',
  method: 'POST',
  headers: {
    "Content-Type": "application/json"
  },
  data: data,
  dataType: 'json',
  success: function (res) {
    if (res.data.code == 200) {
      console.log("订单明细200",res.data);

        // 这个是为了扫码的时候当物料编码不存在则把已经合并了的 resultList 赋值为空 并重新调用合并数据
        if (res.data.data.length == 0) {
          console.log("订单明细为空调用了合并");
          that.setData({
            resultList: [],
          });
          that.mergeData();
        } else {
          console.log("订单明细不为空调用了合并");
         
          that.getPurchaseFenjie(); // 在订单明细获取成功后再获取分解明细数据
          var orderMaterialCodeList = res.data.data;
          that.setData({
            wuliaoList: orderMaterialCodeList,
          });
        
          console.log("订单明细数据wuliaoList", wuliaoList);
          
          that.getPurchaseFenjie(); // 在订单明细获取成功后再获取分解明细数据
          that.mergeData();
        }
        


      // var orderMaterialCodeList = res.data.data;
      // that.setData({
      //   wuliaoList: orderMaterialCodeList,
      // });

      // // 在订单明细获取成功后再获取分解明细数据
      // that.getPurchaseFenjie();

    } else {
      dd.showToast({
        type: 'fail',
        content: res.data.data,
        duration: 2000,
      });
    }
  },
  fail: function (res) {
    console.log("订单明细调用失败",res);
  },
  complete: function (res) {
  }
});
},

// 分解明细
getPurchaseFenjie(e) {
var that = this;
var fidpd = that.data.code
console.log("分解明细数据fid",fidpd);

var data = JSON.stringify(
  {
    "xx": {
      "formId": "ZYKJ_SCRWD",
      "fields": [
        "F_SCRWD_Entry1_FEntryID","F_ZYKJ_BaseProperty4","F_ZYKJ_Base2.fnumber","F_ZYKJ_Base3.fnumber","F_ZYKJ_BaseQty1","F_ZYKJ_Qty_83g","F_ZYKJ_BillStatus_re5"
      ],
      "FilterString": "FID='"+ fidpd +"' and F_ZYKJ_BillStatus_re5='1'",
      "orderby": "",
      "topRowCount": 0,
      "limit": 0,
      "StartRow": 0,
      "fields_name": [
        "行id","材料名称","生产对象","材料编码","基本单位数量","拣货数量","拣货状态"
      ],
      "acctID": "66249c7f42e1e4"
    },
    "login": {
      "username": "test",
      "password": "zz333333"
    }
  }
)

dd.httpRequest({
  url: 'http://cloud.reece-sewing.com:9351/king_query',
  method: 'POST',
  headers: {
    "Content-Type": "application/json"
  },
  data: data,
  dataType: 'json',
  success: function (res) {
    if (res.data.code == 200) {
      console.log("分解明细200",res.data);
      var orderMateriafenjieList = res.data.data;

      // 调用mergeData方法将订单明细和分解明细合并
      var mergedData = that.mergeData(that.data.wuliaoList, orderMateriafenjieList);

      // 更新页面数据，展示合并后的数据
      that.setData({
        mergedData: mergedData
      });
      console.log("合并后的数据", that.data.mergedData);

      const items = that.data.mergedData

      // 使用 reduce 方法来将 items 按 orderItem 分组
      const groupedItems = items.reduce((acc, item) => {
        // 使用 orderItem 的实体主键作为唯一标识符
        const key = item.orderItem.实体主键;

        // 如果这个 key 已经存在于累加器中，则添加 fenjieItem 到对应的数组中
        if (acc[key]) {
          acc[key].fenjieItems.push(item.fenjieItem);
        } else {
          // 否则，创建一个新的分组
          acc[key] = {
            orderItem: item.orderItem,
            fenjieItems: [item.fenjieItem]
          };
        }

        return acc;
      }, {});

      // 将 groupedItems 转换为数组格式以便遍历或其他操作
      const result = Object.values(groupedItems);

      // 打印或者以其他方式使用 result
      console.log("这是合并后的对应数据yyyyyyyy",result);

      that.setData({
        resultList: result
      });
      console.log("这是合并后的对应数据data",that.data.resultList);


      // 以下都是为了计算未拣货数量111111111111111111111111111111111111111111111111111111111111111111111111111
      var resultList = that.data.resultList
      // 遍历resultList中的每个订单项和分解项
      resultList.forEach(order => {
        order.fenjieItems.forEach(fenjieItem => {
          // 计算未拣货数量
          fenjieItem.未拣货数量 = fenjieItem.基本单位数量 - fenjieItem.拣货数量;
        });
      });
      // 更新页面数据
      that.setData({
        resultList: resultList
      });
      console.log("这是合并后的对应数据未拣货data",that.data.resultList);


    } else {
      dd.showToast({
        type: 'fail',
        content: res.data.data,
        duration: 2000,
      });
    }
  },
  fail: function (res) {
    console.log("分解明细调用失败",res);
  },
  complete: function (res) {
  }
});
},

mergeData: function(orderData, fenjieData) {
  let mergedData = [];
  
  // 遍历订单明细数据
  orderData.forEach(function(orderItem) {
    // 遍历分解明细数据
    fenjieData.forEach(function(fenjieItem) {
      // 如果订单明细和分解明细中的物料编码相同，则将它们合并为一个对象
      if (orderItem['物料编码'] === fenjieItem['生产对象']) {
        mergedData.push({
          orderItem: orderItem,
          fenjieItem: fenjieItem
        });
      }
    });
  });

  console.log("合并的数据qqqqqqqqqqqq",mergedData);

  // 返回合并后的数据
  return mergedData;

},

// 点击复选框选中按钮事件
onOneChange(e) {
  const id = e.currentTarget.dataset.id; // 获取当前点击的ID
  const selected = e.detail.value; // 获取当前checkbox的选中状态，true为选中，false为取消选中

  let hangidList = this.data.hangidList || []; // 获取当前的hangidList，若不存在则初始化为空数组

  if (selected) {
    // 如果当前checkbox被选中，则将对应的ID添加到hangidList中
    hangidList.push(id);
  } else {
    // 如果当前checkbox被取消选中，则从hangidList中移除对应的ID
    const index = hangidList.indexOf(id);
    if (index !== -1) {
      hangidList.splice(index, 1);
    }
  }

  // 更新数据
  this.setData({
    hangidList: hangidList // 更新hangidList
  });

  // 打印选中的ID数组
  console.log("选中的ID：", hangidList);

},


// 全选按钮点击事件处理函数
onToggleAll(e) {
  console.log("点击了全选按钮", e)
  const { resultList, allChecked } = this.data;

  // 将 resultList 中所有 fenjieItems 的选中状态设置为 true 或 false
  const updatedResultList = resultList.map(result => {
    return {
      ...result,
      fenjieItems: result.fenjieItems.map(item => {
        return {
          ...item,
          selected: !allChecked,
        };
      }),
    };
  });

  this.setData({
    allChecked: !allChecked,
    resultList: updatedResultList,
  });

  console.log('allChecked==>', allChecked)
  console.log('allChecked==>', updatedResultList)

},

  onTap(e) {
    console.log('onTap', e)

  },


  onInput(e) {
    // 异步返回错误示例
    setTimeout(() => {
      this.setData({
        error: 'error 222'
      })
    }, 3000);
    console.log('onInput', e.detail.value)
  },

  onBlur(e) {
    // var that = this
    console.log('onBlur', e.detail)
    // var item = that.data.item
    // item.基本单位数量 =  e.detail
    // this.setData({
    //   item,
    // });
  },

  onInputnr(e) {
    var that = this
    var inputValue = e.detail.value;
    console.log("输入框的值11111111111111111：", inputValue);
    var inputValueckbm = that.data.secondElement;
    console.log("获取到的编码的值1111111111",inputValueckbm);
  
    // 在这里可以对输入框的值进行进一步操作或者赋值给其他变量
  },

  
  // 提交按钮的 采购入库单修改
  onPrimLargeTap(e) {
    console.log('提交按钮触发了', e);
    // return
    var that = this

    var secondElement = that.data.secondElement;

    console.log("点击提交触发的事件获取到数据=======》",that.data.wuliaoList);
    var wuliaoListntwo = that.data.wuliaoList;   //1.拿到已经编辑好的全部数据列表
    const selectedData = wuliaoListntwo.filter(item => item.selected);  //2.通过过滤的方法创建一个新列表 新列表的数据只包含为true的部分
    console.log("拿到的新列表只为true的部分===》", selectedData)
    // console.log("hhhhhhhhhhhh",selectedData.行ID);

    // 3.通过循环将拿到的数据转换为接口所需要的数据结构
    var F_ZYKJ_CGRK_Entry = []
    for(var i =0; i<selectedData.length; i++){
      F_ZYKJ_CGRK_Entry.push({
        "FEntryID": selectedData[i].行ID,
        "F_ZYKJ_BaseQty": selectedData[i].基本单位数量,
        "F_ZYKJ_Base5": {"FNUMBER": selectedData[i].仓库编码} // 仓库
      })

    }
    console.log("点击提交按钮修改后的item为true的接口所需要的数据结构",F_ZYKJ_CGRK_Entry);

    var data = JSON.stringify(
      {
        "fid": that.data.id,
        "FEntry": F_ZYKJ_CGRK_Entry,
        "IsAutoSubmitAndAudit": true,
        "fromtype": "采购入库单"
      }
    )
    my.showLoading({
      content: '',
    })
    console.log("点击提交创建的data",data);

    return
  
    dd.httpRequest({
      url: 'http://openapi.keyboardadmin.com:10003/godown_entry',
      method: 'POST',
      data: data,
      dataType: 'json',
      success: function (res) {
        // console.log("提交按钮的success响应======》",res);
        if(res.data.code == 200){
          console.log("采购入库单修改成功",res);
                  dd.confirm({
                    title: '温馨提示',
                    content: '下推成功',
                    confirmButtonText: '确认',
                    cancelButtonText: '',
                    success: (result) => {
                      console.log(result);
                      let pages = getCurrentPages();
                      if (result.confirm) {
                        if (pages.length >= 2) {
                          dd.navigateBack({
                            delta: 1 // 返回的层级，这里表示返回两层
                          });
                          my.hideLoading(); // 隐藏 loading 提示框
                        }
                      }else {

                        let pages = getCurrentPages();
                        if (pages.length >= 2) {
                          dd.navigateBack({
                            delta: 1 // 返回的层级，这里表示返回两层
                          });
                          my.hideLoading(); // 隐藏 loading 提示框
                        }
                      }
                }
              });

        }else{
          my.hideLoading(); // 隐藏 loading 提示框
        //  dd.alert({ content: JSON.stringify(res.data.data) });
        // const errorMessages = res.data.data.map(obj => obj.Message);
        // errorMessages.forEach(message => dd.alert({ content: message }));


        const errorMessage = res.data.data.reduce((result, obj, index) => {
          if (index > 0) {
            result += '\n'; // 在每个消息之间添加换行符
          }
          result += obj.Message; // 将每条消息添加到结果字符串中
          return result;
        }, '');
        
        dd.alert({ content: errorMessage });
       
          console.log("采购入库单修改提交按钮的code!=200响应",res);
        }
     
      },
      fail: function (res) {
        // dd.alert({ content: 'fail' });
        // dd.showToast({
        //   type: 'fail',
        //   content: res.errorMessage,
        //   duration: 2000,
        // });
        console.log("提交按钮的fail响应",res);


      },
      complete: function (res) {
        // console.log("提交按钮的complete响应",res);

        // dd.alert({ content: 'complete' });
        // my.hideLoading();
      }
    });


  },


  onConfirm(e) {
    console.log('onConfirm', e.detail.value)
  },
  onClear(e) {
    console.log('onClear', e.detail.value)
  },
  onCheckValidate(value) {
    // 同步返回错误示例
    return 'error'
  },
  onFocus(e) {
    console.log('onFocus', e)
  },
  // 前往日历选择
  // toCalendar() {
  //   dd.navigateTo({
  //     url: '/pages/calendar/calendar',
  //   })
  // },

});
